import { throttle,hideload }  from './common-func.js'
let timer = null
/**
 * @param { url } 接口地址
 * @param { method } 请求方式
 * @param { data } 请求参数
 * @param { header } 请求头/token/cookie
 * @param { hideLoading }  不显示加载动画，默认显示加载动画
 * @dataType 解析为JSON
 * 
 */
function request(options) {
	let hideLoading = options.hideLoading || false
	if (!hideLoading) {
		uni.showLoading({
			title: '加载中',
			mask: true
		})
	}
	return new Promise((resolve, reject) => {
		const orgCode = uni.getStorageSync('orgCode') // 登录的组织机构
		let requestData = {
			user_id: uni.getStorageSync('userId'),
			terminal_app_id: uni.getStorageSync('terminalAppId'),
			terminal_type: uni.getStorageSync('terminalType')
		}
		if (options.data) {
			requestData = Object.assign({}, requestData, options.data)
		}

		uni.request({
			url: options.url,
			method: options.method || "POST",
			data: requestData,
			header: {
				'content-Type': 'application/json;charset=UTF-8',
				'token':requestData.access_token
			},
			timeout: 180000,
			dataType: 'json',
			success: (res) => {
				resolve(res)
				return
				// 小程序statusCode 500走的也是success
				let resultData = res.data
				if (res.statusCode === 200) {
					resolve(res)
				} else {
					if (!options.noShowToast) {
						// 延迟调用，解决微信小程序真机中，提示信息闪烁一下立马消失问题
						setTimeout(() => {
							uni.showToast({
								title: resultData.error_info,
								icon: 'none',
								duration: 3000
							})
						}, 500)
					}
          reject(res)
				}
			},
			fail: async (err) => {
				// h5 statusCode 500走的是fail
				// h5在浏览器中返回的body是个ReadableStream,需要进行一下处理
				if (err.body) {
					let result = await err.json()
					err = result
					uni.showToast({
						title: err.error_info,
						icon: 'none',
						duration: 3000
					})
				}
				reject(err)
			},
			complete: (res) => {
				// console.log(options, res)
				if (!hideLoading) {
					throttle(hideload,500,timer)
				}
			}
		})
	})
}

export default request
 